package huawei;

/**
 * @Author Jun jie Yi
 * 2022/4/11 21:50
 */

import java.util.*;

/**
 * @description:
 * @author: Zmx
 * @create: 2022-04-06 21:42
 **/
public class P2 {
    public static void main(String[] args) {
        Solution solution = new Solution();
        solution.doSolve();
    }
}

class Solution {
    final int MAX = 6000;
    int n;// 服务器个数
    int M; //启动编号
    int need[] = new int[MAX]; // 启动 i 需要的依靠的服务器数量
    int ans[] = new int[MAX];
    boolean visit[] = new boolean[MAX];
    int top = 0;
    List<Integer> solve[] = new ArrayList[MAX]; // solve[i] 存放启动 i 能帮助启动的服务器编号
    List<Integer> depend[] = new ArrayList[MAX]; // depend[i] 存放启动 i 需要的服务器编号
    PriorityQueue<Integer> queue = new PriorityQueue<>();

    public void init() {
        for (int i = 0; i < MAX; i++) {
            solve[i] = new ArrayList<>();
            depend[i] = new ArrayList<>();
        }
    }

    public void doSolve() {
        init();//初始化
        Scanner scanner = new Scanner(System.in);
        n = scanner.nextInt(); // 服务器个数
        M = scanner.nextInt(); //启动编号
        for (int i = 0; i < n; i++) {
            String s = scanner.next();
            String[] split = s.split(",");
            int len = Integer.parseInt(split[0]);
            need[i] = len;
            if (split.length > 1) {
                for (int k = 1; k < split.length; k++) {
                    int id = Integer.parseInt(split[k]);
                    solve[id].add(i);//记录哪些服务启动需要他
                    depend[i].add(id);//记录哪些服务启动需要他
                }
            }
        }
        dfs(M);
        solve(M);
    }

    // 找出启动 M 需要的服务器设置为 true，在 visit 中存储
    public void dfs(int M) {
        visit[M] = true;
        for (int i = 0; i < depend[M].size(); i++) {
            int j = depend[M].get(i);
            //判断是否被遍历过
            if (!visit[j]) {
                dfs(j);
            }
        }
    }

    public void solve(int M) {
        if (need[M] == 0) {
            System.out.println("null");
        }
        int i, u, v;
        // 把能直接启动的服务 加入启动队列。
        for (i = 0; i < n; i++) {
            if (need[i] == 0 && visit[i]) queue.add(-i);
        }
        while (!queue.isEmpty()) {
            u = -queue.poll();
            ans[top++] = u;
            for (i = 0; i < solve[u].size(); i++) {
                v = solve[u].get(i);
                need[v]--;
                if (need[v] == 0 && visit[v]) queue.add(-v);
            }
        }
        // M 最终没有被启动
        if (ans[top - 1] != M) {
            System.out.println("-1");
        } else {
            // 输出启动顺序
            for (i = 0; i < top - 1; i++)
                queue.add(ans[i]);
            System.out.print(queue.poll());
            while (!queue.isEmpty()) {
                System.out.print("," + queue.poll());
            }
        }
    }
}